import { _decorator, Component, Node } from 'cc';
import { _game, _resource } from '../Main';
import { GameState } from '../managers/GameManager';
const { ccclass, property } = _decorator;

@ccclass('BaseGame')
export abstract class BaseGame extends Component {

    start() {
        _resource.fitNode(this.node)
        this.init()
        console.log('游戏 ' + this.gameName + ' 加载成功')
    }

    /** 游戏ID，不可重复 */
    abstract gameId: number

    /** 游戏名称 */
    abstract gameName: string

    /** 游戏状态 */
    gameState: GameState = GameState.Loading

    /** 初始化 */
    abstract init(): void

    /** 开始 */
    abstract run(): void

    /** 暂停 */
    abstract pause(): void

    /** 继续 */
    abstract resume(): void

    /** 复活 */
    abstract revive(): void

    /** 失败 */
    abstract fail(): void

    /** 胜利 */
    abstract success(): void

    /** 重开 */
    abstract restart(): void

    /** 重置 */
    abstract reset(): void

    /** 退出 */
    abstract quit(): void

    timeOut() {
        
    }

    onLoad() {
        _game.game = this
    }

    /** 资源预加载 */
    preload(): boolean {
        return true
    }

    /** 资源卸载 */
    unload(): boolean {
        return true
    }

    /** 是否处于某个游戏阶段 */
    isInGameState(gameState: GameState) {
        return this.gameState === gameState
    }
}


